perm filename X[MSS,LCS]1 blob
sn#122670 filedate 1974-09-28 generic text, type T, neo UTF8
00010 C***** BEAMS, MARKS, XNOTE, BAUTO *******
00100 SUBROUTINE BEAMS
00200 COMMON/ALF/INP(72),ML/FRMT/F78F(1),FA1(1),FA5(1),IREAD
00400 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
00500 COMMON/SCX/RHY(4),JALPHA(19),JX,U,JZ,IRHY,JD,KA,KB,IZ
00510 1 /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG
00650 1 ,IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA
00750 1 /STF/RSTFAC(8),RSTJC
00760 DIMENSION R(8,100)
00765 COMMON /XRN/RN(4000)
00770 EQUIVALENCE (R,RN(3001))
00800 DATA BX/25./,BY/.5/
00900
01000 JAUTO=-1
01100 2500 DO 1500 K=1,72
01110 IF(INP(K).EQ.'B')GO TO 22
01120 C B=AUTOMATIC BEAMS.
01200 IF(INP(K).NE.'*')GO TO 1500
01300 INP(72)='*'
01400 GO TO 500
01500 1500 CONTINUE
01600 C ABOVE FOR 2ND LINE OF INPUT.
01620 22 REREAD F78F,A,B
01640 C TYPE '2B' OR '3B' FOR AUTOMATIC BEAMS. (2=DUPLE 3=TRIPLE)
01660 IF(IREAD.NE.0)A=B
01680 A=A/2.
01700 C '2'=1 '3'=1.5
01710 JAUTO=0
01720 K=0
01740 N=0
01760 J=0
01780 INP(72)='*'
01800 122 K=K+1
01820 L=K
01840 222 C=ABS(V(K))
01860 IF(V(K).GT.0)GO TO 922
01880 1022 N=N+1
01900 C SUBTRACTS NUMB. FOR REST.
01920 IF(C.GE.A)GO TO 1222
01940 1322 L=L+1
01960 GO TO 422
01980 1222 IF(AMOD(C,A).NE.0)GO TO 622
02000 IF(K-L.LE.1)GO TO 522
02020 L=L+1
02040 GO TO 722
02060 922 IF(C.EQ.A)GO TO 522
02080 422 IF(K.EQ.IRHY)GO TO 322
02100 K=K+1
02120 C=C+ABS(V(K))
02140 IF(V(K))GO TO 1022
02160 IF(C.EQ.A)GO TO 722
02180 IF(C.LT.A)GO TO 422
02200 C=AMOD(C,A)
02240 IF(K-L.LE.1)GO TO 622
02260 CALL BAUTO(J,L,K-1,N)
02320 622 L=K
02330 IF(ABS(V(K)).GE.A.OR.C.EQ.0)L=L+1
02340 GO TO 422
02380 722 IF(K.EQ.L)GO TO 522
02382 1722 DO 1422 IS=L,K
02385 1422 IF(V(IS).GE.1)GO TO 1522
02390 C WON'T PUT BEAMS WHERE NOT LOGICAL.
02395 CALL BAUTO(J,L,K,N)
02460 522 IF(K.LT.IRHY)GO TO 122
02480
02490 322 IF(J.EQ.0)RETURN
02495 C NO BEAMS - SO GO BACK.
02500 DO 822 K=J+1,IRHY+2
02520 822 V(K)=0
02540 J=0
02560 GO TO 511
02580 1522 IF(IS-1.GT.L)GO TO 1622
02600 1822 L=IS+1
02620 IF(L.LT.K)GO TO 1722
02640 GO TO 522
02660 1622 CALL BAUTO(J,L,IS-1,N)
02680 GO TO 1822
02690 C ALL THIS ↑↑ FOR QUARTERS IN TRIPLE TIME UNITS!
02700
02713 500 REREAD F78F,V
02739 J=0
02752 IF(IREAD.NE.0)J=1
02765 511 J=J+1
02778 N=V(J)
02830 C SKIPS LINE #S.
02843 1511 JMP=1
02856 505 L=0
02869 K=0
02882 POS=-10.
02900 IF(MODE.EQ.4)GO TO 5030
03000 C MODE 4 IS FOR ACCENTS ETC.
03050 IF(N.GT.100)GO TO 161
03060 C IZ=TOTAL # OF NOTES
03100 IZ=IZ+1
03110 R(8,IZ)=0
03200 IS=0
03300 503 IF(N.GT.0)GO TO 5031
03400 IS=-1
03410 POS=-1.3
03500 C -1= SLUR INTO 1ST NOTE.
03600 C RA=10
03700 C SETS POS OF LFT SIDE (-10+9, THEN +2)
03800 GO TO 5060
03900 5031 IF(N.LE.80)GO TO 5030
04200 C 203 WILL BECOME 201 AT 61
04310 POS=202
04400 GO TO 550
04500 C -1=1ST SLUR FROM NO NOTE; 99= LAST, TO NO NOTE
04600 5030 L=L+1
04700 502 K=K+1
04800 IF(R(1,K).NE.1.)GO TO 502
04900 C IS IT A NOTE?
05000 P=R(2,K)
05100 IF(P.EQ.POS)GO TO 502
05200 C SKIPS DBLSTPS
05300 POS=P
05400 506 IF(L.NE.N)GO TO 5030
05600 5060 IF(MODE.EQ.4)GO TO 30
05700 C NOW SLUR STARTS
05800 IF(JMP)GO TO 504
05900 C JMP=-1 MEANS END NOTE OF GROUP
05910 J=J+1
06000 NN=V(J)
06100 MK=N
06110 N=NN
06155 IF(N)N=-N
06200 M=K
06300 JA=2
06400 JB=4
06500 KN=K
06600 IF(IS)GO TO 550
06800 RB=0
06900 IF(MODE.EQ.3)GO TO 550
07000 A=XNOTE(K)
07050 C XNOTE IS AMOD(R(4,K),100.)
07100 C SAVES LEVEL OF 1ST NOTE.
07200 504 RB=2
07300 B=AMOD(R(6,K),1.0)
07400 IF(B.GE.0.5)RB=4.
07500 IF(B.EQ.0.4)RB=6.
07600 C THESE ARE FOR >(.5) AND ∧(.4) ACCENTS
07700 IF(NN)RB=-RB
07800 C DIP IS SET BY PARAM 7. (STEM DIR. IS AUTOMATIC)
08010 550 R(JA,IZ)=POS
08100 R(JB,IZ)=XNOTE(K)+RB
08200 JA=6
08300 JB=5
08500 C MK=# OF 1ST NOTE, N=END NOTE NOW
08900 JMP=-JMP
09000 IF(JMP.GT.0)GO TO 1503
09100 C GO FIND RT. SIDE OF SLUR
09200 IF(N.LE.MK)N=MK+1
09300 C PICKS UP TYPO ERRORS
09400 JK=0
09500 IF(R(7,K).GE.10)JK=-1
09600 C CHECKS FOR DOT AFTER 1ST NOTE -- FOR TIES.
09700 GO TO 503
09900
10000 1503 R(3,IZ)=STAFF
10100 IF(MODE.EQ.3)GO TO 35
10150 R(8,IZ)=-1
10200 R(1,IZ)=8
10210 IF(IS)R(4,IZ)=R(5,IZ)
10300 NN=-NN
10400 C IF NN IS NEG. NOW IT MEANS STEM DOWN.(DIP IS UP!)
10550 IF(MK.EQ.IRHY.OR.N.EQ.1)GO TO 61
10600 IF(((XNOTE(K).NE.A.OR.N-MK.GT.1).AND.IS.GE.0.
10626 1 ).OR.IS)GO TO 60
10652 C .N. WAS .KQ. 12/73
10800 C JUMP IF NOT ADJACENT NOTE AT SAME PITCH AND NOT 1ST OR LAST.
10810 61 C=9
10820 IF(JK)C=12
10830 IF(R(6,IZ)-R(2,IZ)-C*RSTJC)GO TO 65
10900 IF(IS)A=XNOTE(K)
11000 A=A+.7
11100 IF(NN.GT.0)A=A-1.4
11200 C TO RAISE OR LOWER IT .5
11300 R(4,IZ)=A
11400 R(5,IZ)=A
11650 B=-2
11750 IF(JK)B=-3
11800 C JK=-1 WHEN NOTE IS DOTTED.
12600 C THIS PUTS TIE BETWEEN (NOT ABOVE OR BELOW) NTS. NO STEM CHNG.
12750 R(8,IZ)=B
12800 GO TO 65
13110 161 J=J+1
13120 K=V(J)
13130 M=N-100
13140 C THIS WILL DIRECT STEMS ON NOTES M THROUGH K. IF -K,STEMS DN.
13150 NN=K
13160 IF(K)K=-K
13200
13300 C NEXT IS STEM INVERTER
13500 60 JB=1
13600 RB=10.
13800 IF(NN)GO TO 509
13900 C IF NN IS NEG. NOW IT MEANS STEM DOWN.(DIP IS UP!)
14100 RB=-RB
14200 JB=2
14300 509 DO 507 L=M,K
14400 IF(R(1,L).NE.1.)GO TO 507
14500 JA=R(5,L)/10.
14600 IF(JA.EQ.0)GO TO 507
14700 IF(JA.EQ.JB)R(5,L)=R(5,L)+RB
14800 507 CONTINUE
14810 IF(N.GT.100)GO TO 514
14820 C JUMP IF ONLY REVERSING STEMS.
14900 GO TO 200
15000 62 IF(NN)GO TO 64
15100 IF(A.EQ.DMAX)GO TO 65
15200 AA=B-DMAX
15300 GO TO 63
15400 65 AA=0
15500 GO TO 63
15600 64 IF(A.EQ.UMAX)GO TO 65
15700 AA=UMAX-B
16010 63 RA=R(6,IZ)
16100 RB=R(2,IZ)
16200 X=1.5+(RA-RB)/BX
16300 IF(AA.GT.0)X=X+AA*BY
16400 IF(NN.GT.0)X=-X
16500 510 R(7,IZ)=X
16600 IF(JB)CALL BMX(RA)
16700 514 J=J+1
16800 1514 N=V(J)
16900 IF(N.NE.0)GO TO 505
17000 IF(J.LT.68)GO TO 514
17100 C SOMETIMES A SLASH IS SEEN AS A 0 (WHEN PRECEDED BY SPACE).
17200 IF(INP(72).EQ.'*')RETURN
17300 IF(IREAD.NE.0)GO TO 3501
17400 CALL TYPE
17500 GO TO 2500
17600 3501 READ(22,2501)J,INP
17700 GO TO 2500
17800 C FOR 2ND LINE.
17900 2501 FORMAT(I,72A1)
18000
18100
18200 35 RA=AMOD(R(7,KN),10.0)
18300 C RA=# OF TAILS, KN=1ST NOTE, K=LAST ('MOD' FOR DOTTED NOTES.)
18400 R(1,IZ)=9
18500 JMAX=0
18600 IF(N-MK.EQ.1)JMAX=-1
18800 X=10
18900 IF(NN)X=20
19000 JB=0
19100 DO 2 L=KN+1,K
19150 IF(R(1,L).NE.2)GO TO 12
19160 RB=R(5,L)
19170 GO TO 112
19200 12 IF(R(1,L).NE.1.OR.R(5,L).LT.10.)GO TO 2
19300 C SKIPS NON-NOTES AND DBLSTPS
19350 IF(ABS(R(4,L)).GE.100)GO TO 2
19375 C SKIPS GRACE NOTES
19400 RB=AMOD(R(7,L),10.0)
19500 112 IF(RA.EQ.RB)GO TO 2
19600 JB=-1
19700 C FLAG FOR MIXED NUM. OF BEAMS
19800 IF(RB.LT.RA.AND.RB.NE.0)RA=RB
19900 2 CONTINUE
20000 C ABOVE FINDS SMALLEST # OF TAILS. NEXT FOR HGTS.
20100 X=X+RA
20200 C # OF BEAMS. IT'S PUT IN DOWN BELOW 550.
20300 200 A=XNOTE(KN)
20500 C A=NOTE 1.
20600 UMAX=A
20700 DMAX=A
20800 C UP MAX. NOTE #, DOWN MAX. NOTE #.
20900 103 DO 3 M=KN,K
21000 IF(R(1,M).NE.1.OR.ABS(R(4,M)).GE.100)GO TO 3
21100 C SKIPS NON-NOTES
21200 7 Y=R(5,M)
21300 B=XNOTE(M)
21400 33 IF(NN.GT.0.)GO TO 5
21600 C JUMP IF STEM UP
21700 IF(Y.LT.20..AND.Y.GE.10.)R(5,M)=Y+10.
21800 GO TO 55
21900 5 IF(Y.GE.20.)R(5,M)=Y-10.
22000 C STEM UP
22100 55 IF(B.LT.UMAX)GO TO 13
22200 UMAX=B
22300 IF(JMAX.OR.M.EQ.KN.OR.M.EQ.K)GO TO 3
22400 UMAX=UMAX+1
22500 GO TO 3
22600 13 IF(B.GT.DMAX)GO TO 3
22700 DMAX=B
22800 IF(JMAX.OR.M.EQ.KN.OR.M.EQ.K)GO TO 3
22900 DMAX=DMAX-1
23000 3 CONTINUE
23100 C LOOKS FOR LOWER AND HIGHER NOTES THAN NOTE 1.
23200 4 IF(MODE.EQ.5)GO TO 62
23300 AA=A
23400 BB=B
23500 C=1
23600 IF(X.LT.20.)GO TO 48
23700 C JUMP IF STEM IS UP
23800 CALL EXCH(AA,BB)
23900 C=-C
24000 CALL EXCH(UMAX,DMAX)
24100 48 IF(AA.LT.BB)GO TO 45
24200 IF(UMAX.EQ.A)GO TO 46
24300 47 A=UMAX-C
24400 B=A
24500 GO TO 444
24600 46 IF(UMAX.GT.AA)GO TO 47
24800 GO TO 49
24900 45 IF(UMAX.NE.B)GO TO 47
25100 49 A=AA
25200 B=BB
25300 IF(X.GE.20)CALL EXCH(A,B)
25400
25410 444 R(3,IZ)=STAFF
25510 446 IF(ABS(A-B).LE.6)GO TO 14
25512 C LIMITS SLOPE OF BEAM
25515 IF(X.GE.20)GO TO 141
25520 IF(B.GT.A)GO TO 140
25530 142 B=A-6*C
25540 GO TO 14
25542 141 IF(B.GT.A)GO TO 142
25550 140 A=B-6*C
25600 14 R(4,IZ)=A
25700 445 R(5,IZ)=B
25800 C MAKES HORIZONTAL BEAMS IF PATTERN IS UP-DOWN.
25900 R(6,IZ)=R(2,K)
26000 C ABOVE IS POS.2
26010 IF(JAUTO.OR.UMAX+DMAX.LT.14)GO TO 510
26028 X=X+10
26046 C SETS AUTO. BEAMS' STEM DIRECTION.
26064 DO 1446 L=KN,K
26082 1446 IF(R(5,L).GE.10)R(5,L)=AMOD(R(5,L),10.)+20.
26100 GO TO 510
26200
26300 C NEXT IS FOR ACCENTS AND OTHER MARKS
26400
26500 30 CALL MARKS(RA)
26510 J=J+1
26600 IF(RA.EQ.99)RA=V(J)
26800 C IF STEM IS DOWN OR THERE ARE NOTES BELOW(DBL STP), POSITION
26900 C OF ACCENT WILL BE INVERTED.
27000 RB=R(6,K)
27010 B=10.
27055 IF(RA.EQ.6)RA=26.
27077 C TEMPORARY CHANGE FOR FERMATA*******
27100 IF(RA.GT.10.)RA=RA/10.
27105 A=ABS(AMOD(RB,1.))
27110 IF(A.EQ.0)GO TO 301
27115 IF(RA.GT.3)GO TO 303
27120 RB=FLOAT(IFIX(RB))
27125 RA=RA+A/10.
27127 C THIS PUTS 2-DIGIT CODE BEFORE 1-DIGIT CODE.
27130 GO TO 301
27135 303 IF(A.LT..3)GO TO 302
27140 B=100.
27145 GO TO 301
27150 302 B=1000.
27200 301 IF(RB.LT.0)RA=-RA
27300 R(6,K)=RB+RA/B
27400 GO TO 514
27500 C USES 4-7,9,11-13 FOR ACC. > FERM. DOT - DNBOW UPBOW HARM.
27600 C NOTE#,ACCENT#/N,A/N,A*
27700 END
27800
27900 FUNCTION XNOTE(J)
28010 COMMON/XRN/RN(4000)
28020 DIMENSION R(8,100)
28030 EQUIVALENCE (R,RN(3001))
28100 XNOTE=AMOD(R(4,J),100.)
28200 END
28300
28320 SUBROUTINE BAUTO(J,L,K,N)
28900 C FOR AUTOMATIC BEAMS.
29000 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
29100 J=J+2
29120 V(J-1)=L-N
29140 V(J)=K-N
29160 END